package com.zmn.plat.common.util;


import com.zmn.common.constant.GlobalConsts;
import com.zmn.plat.common.dto.KVDTO;

import java.util.ArrayList;
import java.util.List;

/**
 * 描述: KV结构的树型构建
 *
 * @author guoqiao
 * @since 2021/5/28 10:29
 */
public class TreeUtil {

    /**
     * 描述: 构建树形结构
     *
     * @param kvdtos KV结构的数据集合
     * @param parentId 需要递归遍历的父级id
     * @param level 最大层级(用于减少递归次数)
     * @return com.zmn.plat.common.dto.KVDTO
     * @author guoqiao
     * @since 2021/5/28 10:32
     */
    public static List<KVDTO> buildTree(List<KVDTO> kvdtos, int parentId, int level) {

        List<KVDTO> treeList = new ArrayList<KVDTO>();
        for (KVDTO kvdto : kvdtos) {
            if (kvdto.getParent() == parentId) {
                // 最底层不用设置子类，可减少递归查询次数
                if (kvdto.getLevel() != GlobalConsts.LEVEL_3) {
                    kvdto.setChildren(buildTree(kvdtos, kvdto.getKey(), GlobalConsts.LEVEL_3));
                }
                treeList.add(kvdto);
            }
        }
        return treeList;
    }

}
